package com.abstractAndinterface.abstractdemo;

/**
 * @Description
 * @Author zhoucq
 * @Date 2025/9/18 9:32
 * @Version 1.0
 *  抽象类测试
 *  特点：使用abstract class定义，可包含抽象方法（无实现）和具体方法（有实现）
 *      单继承（一个类只能继承一个抽象类）
 *      支持构造方法，用于初始化成员变量
 *      成员变量可为任意类型（实例变量、静态变量）
 *      至少包含一个抽象方法（无方法体），子类必须实现所有抽象方法才能实例化
 *      仅能通过子类继承并实现抽象方法后创建对象
 *      抽象类可定义普通成员方法和构造方法（供子类调用）
 *      非抽象子类必须重写所有抽象方法，否则子类也需声明为抽象类
 *  应用场景： 定义算法骨架，延迟具体步骤到子类实现，
 *      比如都是计算面积，但是不同图形计算的方式不一样，可以用抽象类定义 计算面积的方法名，具体实现在各个图形的类中实现
 *      强制子类遵循特定行为规范
 */
public abstract class AbstractDemo {

    //构造方法
    public AbstractDemo(){
        System.out.printf("抽象类构造方法");
    }

    // 实例变量
    public String abstractVar = "实例变量";

    // 抽象方法
    public abstract void abstractMethod1();

    public abstract void abstractMethod2();

    // 普通方法
    public String  method1(){
        System.out.printf("抽象类普通方法");
        return "抽象类普通方法";
    };
}
